package com.ruoyi.business.config;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGenerator {
    public static void main(String[] args) {
        //1.获取代码生成器的对象
        AutoGenerator autoGenerator = new AutoGenerator();

        //设置数据库相关配置
        DataSourceConfig dataSource = new DataSourceConfig();
        dataSource.setDriverName("com.mysql.jdbc.Driver");//设置1
//        dataSource.setUrl("jdbc:mysql://localhost:3306/homestay?useSSL=false");
        dataSource.setUrl("jdbc:mysql://39.101.64.201:3308/project1?useSSL=false");
        dataSource.setUsername("root");
        dataSource.setPassword("12345679abcABC");
        autoGenerator.setDataSource(dataSource);

        //设置全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir")+"/ruoyi-mybusiness/src/main/java");    //设置代码生成位置,这里需要改动的就是user-service换成自己的项目模块名,和下面的模块名不是一个意思,下面的模块名只是一个变量名而已，而这里的是项目的模块名
        globalConfig.setOpen(false);    //设置生成完毕后是否打开生成代码所在的目录

        globalConfig.setAuthor("Ao");    //设置作者
        globalConfig.setFileOverride(true);     //设置是否覆盖原始生成的文件
        globalConfig.setMapperName("Front%sMapper");    //设置数据层接口名，%s为占位符，指代模块名称,模块名 = 数据库表名 - 前缀名.在下面的策设置中有设置模块名
        globalConfig.setXmlName("Front%sMapper"); // 设置Service接口的命名方式,这样生成的没有I开头
        globalConfig.setServiceName("Front%sService"); // 设置Service接口的命名方式,这样生成的没有I开头
        globalConfig.setServiceImplName("Front%sServiceImpl"); // 设置Service接口的命名方式,这样生成的没有I开头
        globalConfig.setControllerName("Front%sController"); // 设置Service接口的命名方式,这样生成的没有I开头
//        globalConfig.setIdType(IdType.ASSIGN_ID);   //设置Id生成策略,雪花算法,这一行配置好像没用，id仍然使用自增了，记得去表里注释掉自增id
        autoGenerator.setGlobalConfig(globalConfig);

        //设置包名相关配置
        PackageConfig packageInfo = new PackageConfig();
        packageInfo.setParent("com.ruoyi.business");   //设置生成的包名，与代码所在位置不冲突，二者叠加组成完整路径
        packageInfo.setEntity("entity");    //设置实体类包名
        packageInfo.setMapper("mapper");   //设置数据层包名
        autoGenerator.setPackageInfo(packageInfo);

        //策略设置
        StrategyConfig strategyConfig = new StrategyConfig();
//        strategyConfig.setInclude("comments");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("comments");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("comments");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("complaint_info");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("coupon_info");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("coupon_used_info");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("feature_type");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("features");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("homestay_apply");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("homestay_info");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("orders");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("room_info");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("room_type");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("seller");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("user");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setInclude("chat_content");  //设置当前参与生成的表名，参数为可变参数
        strategyConfig.setInclude("total_order");  //设置当前参与生成的表名，参数为可变参数
//        strategyConfig.setTablePrefix("tb_");  //设置数据库表的前缀名称，模块名 = 数据库表名 - 前缀名  例如： User = tbl_user - tbl_

        strategyConfig.setRestControllerStyle(true);    //设置是否启用Rest风格
//        strategyConfig.setVersionFieldName("version");  //设置乐观锁字段名
//        strategyConfig.setLogicDeleteFieldName("deleted");  //设置逻辑删除字段名
        strategyConfig.setEntityLombokModel(true);  //设置是否启用lombok
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 将数据库表名转换为驼峰命名法
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 将数据库字段名转换为驼峰命名法
        autoGenerator.setStrategy(strategyConfig);
        //2.执行生成操作
        autoGenerator.execute();
    }
}